public class Node(){
    public int value;
    public Node next;
    public Node(int data){
        this.value=data;
    }
}


public static Node reversePart(Node head,int from,int to){
    int len=0;
    Node node1=head;
    Node fPre=null;
    Node tPos=null;

    //find fPre and tPos
    while(node1!=null){
        len++;
        fPre=len==from?node1:fPre;
        tPos=len==to?node1:tPos;
        node1=node1.next;
    }
    //check if 1<=form<=to<=Node
    if(from<1||from>to||to>len){
        return head;
    }

    //reverse the node
    node1=fPre==null?head:fPre.next;
    Node node2=node1.next;
    node1.next=tPos;
    Node next=null;
    while(node2!=null){
        next=node1.next;
        node2.next=node1;
        node1=node2;
        node2=next;
    }

    //check fPre IS NULL OR NOT
    if(fPre!=null){
        fPre.next=node1;
        return head;
    }
   return node1;
}